/**
 * 用于监控路由变化，以改变菜单和选项卡的状态。不需要监控路由，因为路由状态的变化会受到页面呈现时间的影响，呈现时间会比较慢
 */

import mitt from '@/utils/mitt.js';
import { getRawRoute } from '@/utils';

const emitter = mitt();

const key = Symbol();

let lastChangeTab;

// 设置路由变化的函数
export function setRouteChange(lastChangeRoute) {
	const r = getRawRoute(lastChangeRoute); // 获取原始路由
	emitter.emit(key, r); // 发出路由变化的事件
	lastChangeTab = r; // 更新最后一次改变的选项卡
}

// 监听路由变化的函数
export function listenerRouteChange(callback, immediate = true) {
	emitter.on(key, callback); // 注册路由变化的回调函数
	immediate && lastChangeTab && callback(lastChangeTab); // 如果需要立即执行回调，并且存在最后一次改变的选项卡，则执行回调
}

// 移除选项卡改变监听的函数
export function removeTabChangeListener() {
	emitter.clear(); // 清除所有事件监听
}
